package org.puc.enquete.servlet;

import java.io.IOException;
import java.util.Date;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.puc.enquete.ejb.EnqueteBeanLocal;
import org.puc.enquete.ejb.OpcaoBeanLocal;
import org.puc.enquete.ejb.VotoBeanLocal;
import org.puc.enquete.entity.Enquete;
import org.puc.enquete.entity.Opcao;
import org.puc.enquete.entity.Usuario;
import org.puc.enquete.entity.Voto;

public class RegistrarVoto extends HttpServlet {
    
    @EJB
    private VotoBeanLocal vb;
    @EJB
    private OpcaoBeanLocal opcaoBean;
    @EJB
    private EnqueteBeanLocal enqueteBean;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        Integer idEnquete = Integer.valueOf(request.getParameter("enquete"));
        Enquete enquete;
        try {
            enquete = enqueteBean.obterEnquete(idEnquete);
            if (!enquete.getAtiva()) {
                throw new Exception("Enquete não está ativa!");
            }
        } catch (Throwable e) {
            request.setAttribute("erro", e.getMessage());
            request.getRequestDispatcher("/ListarEnquetes").forward(request, response);
            return;
        }

        //recupera opção selecionada
        Opcao opcaoEscolhida = null;
        try {

            String idOpcao = request.getParameter("opcao");
            if (idOpcao == null || idOpcao.trim().length() == 0) {
                throw new Exception("Seleciona uma opção válida!");
            }

            opcaoEscolhida = opcaoBean.obterOpcao(Integer.valueOf(idOpcao));
            if (opcaoEscolhida == null) {
                throw new Exception("Seleciona uma opção válida!");
            }

            //cria novo voto
            Voto voto = new Voto();
            voto.setOpcao(opcaoEscolhida);
            voto.setComentario(request.getParameter("comentario"));
            voto.setData(new Date(System.currentTimeMillis()));

            //se o usuário estava logado, define qual é
            Usuario usuario = (Usuario) request.getSession().getAttribute("usuario");
            voto.setUsuario(usuario.getValido() ? usuario : null);

            vb.insereVoto(voto);

            request.setAttribute("mensagem", "Voto registrado com sucesso!");
            request.getRequestDispatcher("/MostrarEstatisticas?enquete=" + opcaoEscolhida.getEnquete().getId()).forward(request, response);

        } catch (Throwable e) {

            request.setAttribute("erro", "Erro: " +  e.getMessage());
            request.getRequestDispatcher("/Votar").forward(request, response);

        }

    }

}
